<?php

class Rendering extends Controller {
	
	function Rendering()
	{
		parent::Controller();
		
		$this->load->model('collection');
		$this->load->model('frame');
		
		$this->load->helper('file');
		$this->load->helper('form');
	}
	
	function index()
	{
		$data['title'] = "Vos presentations";
		$data['collections'] = $this->getAllCollection();
		$this->load->view('render/collection', $data);
	}
	
	function getAllCollection()
	{

		//getlast = recup les slides
		$col = $this->collection->getLast(10);
		
		foreach ($col as &$item)
		{
			$item->NB = $this->frame->getNbFrameOf($item->ID);
			
			$item->TITRE = htmlentities($item->TITRE, ENT_QUOTES);
			
			if ($item->NB == 0 && strlen($item->TITRE ) > 36)
				$item->TITRE = substr($item->TITRE , 0, 36)."...";
			
			if (strlen($item->TITRE ) > 49) 
				$item->TITRE = substr($item->TITRE , 0, 49)."...";
			
			$imageId = $this->frame->getFirstPage($item->ID);
			
			$item->IMG = base_url().$this->config->item('dirUpload').$item->DIR."/thumbs/".$imageId.".gif";
			
		}
		
		return $col;
	}
	
	function getFramesFromCol($idCol=0)
	{
		// il faut voir si le user a qqch dans POSSEDER, si oui on passe l'id de la colonne sinon on fait rien
		// récupération de la collection
		$IDUS = $_SESSION['ID'];
		$sql = "SELECT * FROM POSSEDER WHERE ID_US=".$IDUS;
       		$query = $this->db->query($sql);

		if ($idCol != 0)
		{
		
			$collection = $this->collection->getCol($idCol);
			
			// ajout de l'url des miniatures dans le tableau des frames
			$i=0;
			$frames = $this->frame->getFrames($idCol);
			foreach($frames as &$item)
			{
				$item['IMG'] = base_url().$this->config->item('dirUpload').$collection->DIR."/thumbs/".$item['ID'].".gif";
				
				if (strlen($item['TITRE']) > 25) $item['TITRE'] = substr($item['TITRE'], 0, 25)."...";
				$item['TITRE'] = ($i+1)."/".count($frames)." - ".$item['TITRE'];
				
				$i++;
			}
			
			$data['titleCol'] = $collection->TITRE;
			$data['frames'] = $frames;
			$data['idCol'] = $idCol;
			$data['name'] = htmlentities($collection->TITRE, ENT_QUOTES);;
			
			$js = '<script type="text/javascript" src="' . base_url() . 'js/frame.js"></script>';
			$data['extraHeadContent'] = $js;
			
			$data['title'] = "Frames de la collection ".$collection->TITRE;
			$this->load->view('render/frame', $data);
		}
		
	}
	
	function generate()
	{	
		$ordre = $this->input->post('serialize'); 	// ordre de toutes les frames
		$frames = array_keys($_POST, "on"); 		// toutes les frames cochés
		$idCol = $this->input->post('idCol');
		$name = $this->input->post('title');
		$save = $this->input->post('save');
		
		// découpage de l'ordre avant traitement
		$ordre = split ("&", $ordre);
		foreach($ordre as &$element)
		{
			$pos = strpos($element,"=") +1;
			$element = substr($element, $pos);
		}
		
		// récupération des frames cochés par ordre de l'utilisateur
		$newCollection = array();
		foreach($ordre as $element)
		{
			if ($element{0}=="S" || $element{0}=="B") array_push($newCollection, ltrim(ereg_replace('%2520',' ',$element)));
			if (in_array($element, $frames)) array_push($newCollection, $element);
		}
		//$frames = (array_diff($ordre, array_diff($ordre, $frames)));
		
		
		if ($idCol && $name)
		{
			$col = $this->collection->getCol($idCol);
			
			// chaine contenant la futur collection
			$input = "";
			$input .= ($col->PACKAGES);
			$input .= "\begin{document}";
			
			if($save == "on")
				$this->collection->insert($name, $col->AUTEUR, $col->PACKAGES, $col->DIR);
			
			foreach($newCollection as $frame)
			{
				// S = Section
				if($frame{0}=="S") $input .= "\section{". substr($frame, 1)."}";
				
				// B = suBsection
				if($frame{0}=="B") $input .= "\subsection{". substr($frame, 1)."}";
				
				if(is_numeric($frame))
				{
					$input .= $this->frame->getFrame($frame)->CONTENU;
					
					if($save == "on")
					{
						$titre = $this->getFrameTitle($frame);
						$contenu = $this->frame->getFrame($frame)->CONTENU;
						$this->frame->insertRelation($this->collection->getLastId(), $frame);
					}
				}
			}
			$input .= "\end{document}";
			
			// recherche du fichier .tex dans l'archive décompressé
			$texFile = substr(exec('./find.sh '.$this->config->item('dirUpload').$col->DIR." '*.tex'"), 1);
			$texFilePath = $this->config->item('dirUpload').$col->DIR.$texFile;
			$pos = strrpos($texFilePath, "/");
			$texPath = substr($texFilePath, 0, $pos);
			
			
			// chemin d'écriture du nouveau fichier
			$path = $texPath."/".$name.".tex";
			// écriture du fichier
			if ( ! write_file($path, $input)) echo 'Unable to write the file';
			
			// compilation du nouveau fichier
			$this->compile($texPath, $name);
			
			exec("./clean.sh ".$texPath." ".$name.".pdf");
			
			// téléchargement du pdf
			redirect("../".$texPath."/".$name.".pdf", 'refresh');
			
		}
		else echo("veuillez renseigner un titre");
	}
	
	// appel du script de compilation
	function compile($path, $filename)
	{
		// usage = make path filename
		// WARNING : filename = filename sans extension
		// exemple : ./make.sh ./uploads/google/ google
		
		exec("./make.sh ".$path." ".$filename);
	}
	
}
?>
